package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.PageWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.feign.client.dto.DictTypeDTO;
import com.zx.system.block.model.SysDictType;
import com.zx.system.block.param.DictTypeParam;
import com.zx.system.block.vo.SysDictTypeVO;

import java.util.Map;

/**
 * <p>
 * description: 业务层字典类型服务 <br>
 * create: 2025-11-18
 * </p>
 *
 * @author zhou xun
 */
public interface ISysDictTypeService {

    /**
     * 获取字典类型信息Map 用于字典类型信息匹配
     *
     * @return 包含字典类型标识符作为键, {@link SysDictType} 对象作为值的映射表{@code Map<String, SysDictType>}
     * @author zhou xun
     * @since 2025-11-18
     */
    Map<String, SysDictType> getDictType();

    /**
     * 查询字典类型列表
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link ListWrapper<SysDictType>}
     * @author zhou xun
     * @since 2025-11-18
     */
    ListWrapper<SysDictType> selectDictTypeList(DictTypeParam dictTypeParam);

    /**
     * 分页查询字典类型列表
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link PageWrapper<SysDictType>}
     * @author zhou xun
     * @since 2025-11-18
     */
    PageWrapper<SysDictType> selectDictTypeListByPage(DictTypeParam dictTypeParam);

    /**
     * 查询字典类型列表VO
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link ListWrapper<SysDictTypeVO>}
     * @author zhou xun
     * @since 2025-11-18
     */
    ListWrapper<SysDictTypeVO> selectDictTypeVOList(DictTypeParam dictTypeParam);

    /**
     * 分页查询字典类型列表VO
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link PageWrapper<SysDictTypeVO>}
     * @author zhou xun
     * @since 2025-11-18
     */
    PageWrapper<SysDictTypeVO> selectDictTypeVOListByPage(DictTypeParam dictTypeParam);

    /**
     * 新增字典类型
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper addDictType(DictTypeParam dictTypeParam);

    /**
     * 编辑字典类型
     *
     * @param dictTypeParam 字典类型参数
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper editDictType(DictTypeParam dictTypeParam);

    /**
     * 编辑字典类型状态
     *
     * @param id     字典类型Id
     * @param status 字典类型状态 0停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper editDictTypeStatus(String id, Integer status);

    /**
     * 删除字典类型
     *
     * @param dictTypeId 字典类型Id
     * @return {@link ResponseWrapper}
     * @author zhou xun
     * @since 2025-11-18
     */
    ResponseWrapper deleteDictType(String dictTypeId);

    /**
     * 查询启用的字典类型列表VO
     *
     * @return {@link ListWrapper<SysDictTypeVO>}
     * @author zhou xun
     * @since 2025-11-19
     */
    ListWrapper<SysDictTypeVO> selectEnableDictTypeVOList();

    /**
     * 获取启用的字典类型列表DTO
     *
     * @return {@link ListWrapper<DictTypeDTO>}
     * @author zhou xun
     * @since 2025-11-21
     */
    ListWrapper<DictTypeDTO> selectEnableDictTypeDTOList();
}